\section{Evaluation}

    One of the main problems we encountered during the development was how to determine if the robot has reached its goal point. Two solutions were acceptable. The first is was computing the estimate time to reach the goal point. It was possible because linear speed and distance to cross is known. Then we could make the program sleep for the computed time. The second solution is to check regularly the distance between the robot position and its goal point and define a tolerated error to consider that goal point is reached. We firstly implemented the sleep method but when we implemented obstacle avoidance, "waiting" by checking remaining distance to cross seems to be more relevant, so we opted for that solution.\\
    
    Considering some evolution of the program this "waiting" function will be an advantage. Indeed, if we had time to use multi-thread implementation, a thread would check for obstacle in background and dynamically indicates to the thread controlling robot moves to modify its current goal point. These communications between threads would have enabled the robot to avoid obstacles in a reactive way and not only on a predictive way.\\
    
    We could also had implemented a generation of the environment map thanks to laser and then apply an \textit{$A^*$} algorithm to always avoid obstacles, however it will not be a real algorithm of path tracking, but it would have been interesting.